package com.eduagent.xwqeduagent.utils.oj;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

/**
 * Judge0代码提交请求模型
 */
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class JudgeSubmission {
    
    /**
     * 源代码
     */
    @JsonProperty("source_code")
    private String sourceCode;
    
    /**
     * 语言ID
     */
    @JsonProperty("language_id")
    private Integer languageId;
    
    /**
     * 标准输入
     */
    @JsonProperty("stdin")
    private String stdin;
    
    /**
     * 期望输出
     */
    @JsonProperty("expected_output")
    private String expectedOutput;
    
    /**
     * 是否包含额外文件
     */
    @JsonProperty("additional_files")
    private Boolean additionalFiles;
    
    /**
     * 编译脚本
     */
    @JsonProperty("compile_cmd")
    private String compileScript;
    
    /**
     * 运行脚本
     */
    @JsonProperty("run_cmd")
    private String runScript;
    
    /**
     * CPU时间限制（秒）
     */
    @JsonProperty("cpu_time_limit")
    private Double cpuTimeLimit;
    
    /**
     * CPU额外时间（秒）
     */
    @JsonProperty("cpu_extra_time")
    private Double cpuExtraTime;
    
    /**
     * 墙上时间限制（秒）
     */
    @JsonProperty("wall_time_limit")
    private Double wallTimeLimit;
    
    /**
     * 内存限制（KB）
     */
    @JsonProperty("memory_limit")
    private Integer memoryLimit;
    
    /**
     * 栈限制（KB）
     */
    @JsonProperty("stack_limit")
    private Integer stackLimit;
    
    /**
     * 最大进程数
     */
    @JsonProperty("max_processes_and_or_threads")
    private Integer maxProcessesOrThreads;
    
    /**
     * 是否启用网络
     */
    @JsonProperty("enable_network")
    private Boolean enableNetwork;
    
    /**
     * 回调URL
     */
    @JsonProperty("callback_url")
    private String callbackUrl;
    
    /**
     * 编译器选项
     */
    @JsonProperty("compiler_options")
    private String compilerOptions;
    
    /**
     * 命令行参数
     */
    @JsonProperty("command_line_arguments")
    private String commandLineArguments;
    
    /**
     * 重定向标准错误到标准输出
     */
    @JsonProperty("redirect_stderr_to_stdout")
    private Boolean redirectStderrToStdout;
    
    /**
     * 自动修复断行
     */
    @JsonProperty("enable_per_process_and_thread_time_limit")
    private Boolean enablePerProcessTimeLimit;
    
    /**
     * 自动修复断行
     */
    @JsonProperty("enable_per_process_and_thread_memory_limit")
    private Boolean enablePerProcessMemoryLimit;
    
    /**
     * 自动修复断行
     */
    @JsonProperty("max_file_size")
    private Integer maxFileSize;
    
    /**
     * 批量令牌
     */
    @JsonProperty("batch_id")
    private String batchId;
    
    /**
     * 自定义字段
     */
    @JsonProperty("custom_id")
    private String customId;
    
    /**
     * 语言名称（非API字段，仅用于便捷设置）
     */
    private transient String languageName;
    
    /**
     * 设置语言名称（自动转换为语言ID）
     * @param languageName 语言名称
     */
    public void setLanguageName(String languageName) {
        this.languageName = languageName;
        if (languageName != null) {
            Integer id = JudgeLanguage.getLanguageId(languageName);
            if (id != null) {
                this.languageId = id;
            }
        }
    }
} 